﻿
#include "zyUpDown.h"

BlackMoonUI::zyUpDown::zyUpDown()
{
	SetMember(L"this", (LONG_PTR)this);
	m_obj->setChildWndProc(zyUpDown_ChildWndProc);
	setType(zyType_UpDown);
}
BlackMoonUI::zyUpDown::~zyUpDown()
{

}

LRESULT WINAPI BlackMoonUI::zyUpDown::zyUpDown_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle)
{
	if (message == WM_NOTIFY)
	{
		NMHDR* nm = reinterpret_cast<NMHDR*>(lParam);
		if (nm->code == UDN_DELTAPOS) {
			TRegEvent* evtPtr = reinterpret_cast<TRegEvent*>(obj->getRegEvent(L"OnUpDown"));
			if (evtPtr != nullptr) {
				NMUPDOWN* nmud = reinterpret_cast<NMUPDOWN*>(lParam);
				LRESULT ret = evtPtr->handler<LRESULT>(nm->hwndFrom, nmud->iDelta, nmud->iPos);
				*bHandle = true;
				return ret;
			}
		}
	}
	return zyCtrol::zyCtrol_ChildWndProc(obj, hWnd, message, wParam, lParam, bHandle);
}

BOOL BlackMoonUI::zyUpDown::创建(HWND 参数_父窗口, const std::wstring& 参数_标题, POINT 参数_位置, POINT 参数_尺寸, int 参数_ID, int 参数_窗口风格, int 参数_扩展风格)
{
	if (参数_ID == NULL)
		参数_ID = 黑月默认ID();
	if (参数_窗口风格 == 0)
		参数_窗口风格 = UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS;

	bool b = _CreateCtrol(参数_父窗口, 参数_标题, 参数_位置, 参数_尺寸, 参数_ID, 参数_窗口风格, 参数_扩展风格, L"msctls_updown32");
	return b;
}

BOOL BlackMoonUI::zyUpDown::创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题, POINT 参数_位置, POINT 参数_尺寸, int 参数_ID, int 参数_窗口风格, int 参数_扩展风格)
{
	if (参数_ID == NULL)
		参数_ID = 黑月默认ID();
	if(参数_窗口风格 == 0)
		参数_窗口风格= UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS;

	bool b = _CreateCtrol(参数_父窗口.getHwnd(), 参数_标题, 参数_位置, 参数_尺寸, 参数_ID, 参数_窗口风格, 参数_扩展风格, L"msctls_updown32");
	return b;
}
int BlackMoonUI::zyUpDown::按钮值(int 参数_按钮值) {
	if (参数_按钮值 == NULL)
		return (int)sendMsg(UDM_GETPOS32, 0, 0);
	else
		return (int)sendMsg(UDM_GETPOS32, 0, 参数_按钮值);
}
int BlackMoonUI::zyUpDown::置按钮值范围(int 参数_最小按钮值, int 参数_最大按钮值) {
	return (int)sendMsg(UDM_SETRANGE32, 参数_最小按钮值, 参数_最大按钮值);
}
POINT BlackMoonUI::zyUpDown::取按钮值范围() {
	POINT rang = { 0 };
	sendMsg(UDM_GETRANGE32, (WPARAM)&rang.x, (LPARAM)&rang.y);
	return rang;
}
int BlackMoonUI::zyUpDown::基数(int 参数_基数) {
	if (参数_基数 == NULL)
		return (int)sendMsg(UDM_GETBASE, 0, 0);
	else
		return (int)sendMsg(UDM_GETBASE, 0, 参数_基数);
}
int BlackMoonUI::zyUpDown::关联控件(zyWindow* 参数_编辑控件) {
    // 空指针检查
    if (参数_编辑控件 == nullptr) {
        return static_cast<int>(sendMsg(UDM_GETBUDDY, 0, 0));
    }
    HWND hwnd = 参数_编辑控件->取窗口句柄();
    // 检查窗口句柄是否为空
    if (hwnd == NULL) {
        return static_cast<int>(sendMsg(UDM_GETBUDDY, 0, 0));
    } else {
		return static_cast<int>(sendMsg(UDM_SETBUDDY, reinterpret_cast<WPARAM>(hwnd), 0));
    }
}